package com.kaguya.factory;

/**
 * 简单工厂模式 创建型
 * 工厂模式，隐藏类的实现，用户只需调用接口即可，将统一接口下的不同实现交给工厂处理
 * 符合开闭原则，单一职责
 */
public class SimpleFactory {

    public static void main(String[] args) {

        //通过参数来控制得到的具体子类实例
        BaseInterface method = Factory.getMethod(2);

        method.sayHello();
    }

}

//简单工厂，处理具体需要返回的实例
 class Factory{


    //控制返回指定的实例
    public static BaseInterface getMethod(int id){
        //根据参数去选择具体需要实例化的实现类
        BaseInterface bi;
        switch (id){
            case 1:
                bi = new Child1();
                return bi;
            case 2:
                bi = new Child2();
                return bi;
            case 3:
                bi = new Child3();
                return bi;
            default:
                return null;
        }
    }
}
//抽象类或接口,这里使用接口
interface BaseInterface{
     void sayHello();
}
//实现类1
class Child1 implements BaseInterface{

    @Override
    public void sayHello() {
        System.out.println("Child1 said Hello!");
    }
}
//实现类2
class Child2 implements BaseInterface{

    @Override
    public void sayHello() {
        System.out.println("Child2 said Hello!");
    }
}
//实现类3
class Child3 implements BaseInterface{

    @Override
    public void sayHello() {
        System.out.println("Child1 said Hello!");
    }
}